/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.modules.financial.service.ttpaymentorder;

import com.jeesite.common.entity.Page;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.custom.service.CodeRuleService;
import com.jeesite.modules.file.utils.FileUploadUtils;
import com.jeesite.modules.financial.dao.ttpaymentorder.TtPaymentOrderDao;
import com.jeesite.modules.financial.dao.ttpaymentorder.TtPaymentOrderDetailDao;
import com.jeesite.modules.financial.entity.ttpaymentorder.TtPaymentOrder;
import com.jeesite.modules.financial.entity.ttpaymentorder.TtPaymentOrderDetail;
import com.jeesite.modules.logistics.dao.overseaswarehouse.OverseasWarehouseDetailDao;
import com.jeesite.modules.logistics.entity.overseaswarehouse.OverseasWarehouse;
import com.jeesite.modules.logistics.entity.overseaswarehouse.OverseasWarehouseDetail;
import com.jeesite.modules.logistics.service.overseaswarehouse.OverseasWarehouseService;
import com.jeesite.modules.sys.utils.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * TT付款单Service
 * @author Kilo
 * @version 2021-03-10
 */
@Service
@Transactional(readOnly=true)
public class TtPaymentOrderService extends CrudService<TtPaymentOrderDao, TtPaymentOrder> {
	
	@Autowired
	private TtPaymentOrderDetailDao ttPaymentOrderDetailDao;
	@Autowired
	private CodeRuleService codeRuleService;
	@Autowired
	private OverseasWarehouseService overseasWarehouseService;
	@Autowired
	private OverseasWarehouseDetailDao overseasWarehouseDetailDao;
	/**
	 * 获取单条数据
	 * @param ttPaymentOrder
	 * @return
	 */
	@Override
	public TtPaymentOrder get(TtPaymentOrder ttPaymentOrder) {
		TtPaymentOrder entity = super.get(ttPaymentOrder);
		if (entity != null){
			TtPaymentOrderDetail ttPaymentOrderDetail = new TtPaymentOrderDetail(entity);
			ttPaymentOrderDetail.setStatus(TtPaymentOrderDetail.STATUS_NORMAL);
			entity.setTtPaymentOrderDetailList(ttPaymentOrderDetailDao.findList(ttPaymentOrderDetail));
		}
		return entity;
	}
	
	/**
	 * 查询分页数据
	 * @param ttPaymentOrder 查询条件
	 * @param ttPaymentOrder.page 分页对象
	 * @return
	 */
	@Override
	public Page<TtPaymentOrder> findPage(TtPaymentOrder ttPaymentOrder) {
		return super.findPage(ttPaymentOrder);
	}
	
	/**
	 * 保存数据（插入或更新）
	 * @param ttPaymentOrder
	 */
	@Override
	@Transactional(readOnly=false)
	public void save(TtPaymentOrder ttPaymentOrder) {
		if(ttPaymentOrder.getIsNewRecord()){
			ttPaymentOrder.setPaymentOrderCode(codeRuleService.getCode("TtPaymentOrder"));
			ttPaymentOrder.setCreateBy(UserUtils.getUser().getLoginCode());
		}
		super.save(ttPaymentOrder);
		if (ttPaymentOrder.getIsNewRecord()){
			codeRuleService.updateCurrentNumber("TtPaymentOrder");
		}
		// 回写海外仓TT付款单号
		OverseasWarehouse overseasWarehouse = new OverseasWarehouse();
		overseasWarehouse.setOverseasWarehouseId(ttPaymentOrder.getOverseasWarehouseCode());
		overseasWarehouse.setTtPaymentOrderId(ttPaymentOrder.getTtPaymentOrderId());
		overseasWarehouseService.update(overseasWarehouse);
		List<OverseasWarehouseDetail> list = overseasWarehouseDetailDao.findList(new OverseasWarehouseDetail(overseasWarehouse));
		for (OverseasWarehouseDetail overseasWarehouseDetail : list) {
			overseasWarehouseDetail.setPaymentOrderCode(ttPaymentOrder.getPaymentOrderCode());
			overseasWarehouseDetailDao.update(overseasWarehouseDetail);
		}
		// 保存上传图片
		FileUploadUtils.saveFileUpload(ttPaymentOrder.getId(), "ttPaymentOrder_image");
		// 保存上传附件
		FileUploadUtils.saveFileUpload(ttPaymentOrder.getId(), "ttPaymentOrder_file");
		// 保存 TtPaymentOrder子表
		for (TtPaymentOrderDetail ttPaymentOrderDetail : ttPaymentOrder.getTtPaymentOrderDetailList()){
			if (!TtPaymentOrderDetail.STATUS_DELETE.equals(ttPaymentOrderDetail.getStatus())){
				ttPaymentOrderDetail.setTtPaymentOrderId(ttPaymentOrder);
				if (ttPaymentOrderDetail.getIsNewRecord()){
					ttPaymentOrderDetailDao.insert(ttPaymentOrderDetail);
				}else{
					ttPaymentOrderDetailDao.update(ttPaymentOrderDetail);
				}
			}else{
				ttPaymentOrderDetailDao.delete(ttPaymentOrderDetail);
			}
		}
	}
	
	/**
	 * 更新状态
	 * @param ttPaymentOrder
	 */
	@Override
	@Transactional(readOnly=false)
	public void updateStatus(TtPaymentOrder ttPaymentOrder) {
		super.updateStatus(ttPaymentOrder);
	}
	
	/**
	 * 删除数据
	 * @param ttPaymentOrder
	 */
	@Override
	@Transactional(readOnly=false)
	public void delete(TtPaymentOrder ttPaymentOrder) {
		super.delete(ttPaymentOrder);
		TtPaymentOrderDetail ttPaymentOrderDetail = new TtPaymentOrderDetail();
		ttPaymentOrderDetail.setTtPaymentOrderId(ttPaymentOrder);
		ttPaymentOrderDetailDao.deleteByEntity(ttPaymentOrderDetail);
	}
	
}